home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / misc / amag / 12b92.lha / Knobelecke / Stellensuche / displ.asm < prev    next >
Assembly Source File  |  1992-11-02  |  3KB  |  146 lines

  1.    ;************************************************************************
  2.    ; Routine zur Ausgabe von pi                                            *
  3.    ; Teil des Programms E.asm aus AMIGA-MAGAZIN 9/92 (mit Anpassungen)     *
  4.    ;                                                                       *
  5.    ;                                                                       *
  6.    ; Parameter:  in:  (a5) +8,12,16                                        *
  7.    ;                  (a5)+8 enthaelt pi als Dualbruch der Laenge (a5)+12  *
  8.    ;                  (a5)+16 enthaelt die Ausgabelaenge!                  *
  9.    ;            out:  Ausgabe von pi als Dezimalbruch und #Nachkommastellen*
  10.    ;************************************************************************
  11.  
  12. ExecBase:        equ  4
  13. RawDoFmt:        equ -522
  14. OldOpenLib:      equ -408
  15. CloseLib:        equ -414
  16. Open:            equ -30
  17. Close:           equ -36
  18. Write:           equ -48
  19. Output:          equ -60
  20.  
  21.    public   _displ
  22. _displ:     
  23.    movem.l  d0-a6,-(a7)
  24.    lea      pi(pc),a0
  25.    move.l   8(a5),(a0)     A(pi)
  26.    move.l   12(a5),4(a0)   llen
  27.    move.l   12(a5),d0
  28.    moveq    #2,d1
  29.    mulu     d1,d0
  30.    move.l   d0,8(a0)       wlen
  31.    mulu     d1,d0
  32.    move.l   d0,12(a0)      flen
  33.    move.l   16(a5),16(a0)  alen
  34.  
  35.  
  36.    move.l   ExecBase,a6
  37.    lea      dosname(pc),a1
  38.    jsr      OldOpenLib(a6)
  39.    move.l   d0,dosbase
  40.    move.l   d0,a6
  41.    jsr      Output(a6)
  42.    move.l   d0,handle
  43.  
  44.  
  45. ausgabe:
  46.    move.l   pi(pc),a3
  47.    move.l   (a3),d2
  48.    lea      formatstr0(pc),a0
  49.    bsr      print
  50.    clr.l    (a3)
  51.    move.l   alen(pc),d5
  52.    clr.l    d6            ;Zaehler init
  53.    move.l   flen(pc),a5
  54.    moveq    #0,d2
  55.    move.l   wlen(pc),d7
  56.    subq.l   #1,d7
  57. drucken:
  58.    move.l   pi(pc),a3
  59.    adda.l   a5,a3
  60.    move.l   d7,d3        ;Schleifenlaenge
  61.    moveq    #0,d1
  62.    moveq    #0,d0
  63. druckloop:
  64.    move.w   -(a3),d0
  65.    mulu     #10000,d0
  66.    add.l    d1,d0
  67.    move.w   d0,(a3)
  68.    tst.w    d2
  69.    bne      ueberlauf
  70.    tst.w    d0            ;Nullen 
  71.    bne      dremember        ;von rechts
  72.    lea      -2(a5),a5        ;merken
  73.    subq.l   #1,d7        ;neue Schleifenlaenge 
  74.    blt      ddone        ;fertig, wenn negativ
  75.    bra      ueberlauf
  76. dremember:
  77.    moveq    #1,d2
  78. ueberlauf: 
  79.    clr.w    d0
  80.    swap     d0
  81.    move.w   d0,d1
  82.    dbra     d3,druckloop
  83.  
  84.    move.l   pi(pc),a3
  85.    move.l   (a3),d2
  86.    lea      formatstr1(pc),a0
  87.    bsr      print
  88.    clr.l    (a3)
  89.    addq.l   #4,d6
  90.    dbra     d5,drucken
  91.  
  92. ddone:
  93.    move.l   d6,d2
  94.    lea      formatstr3(pc),a0
  95.    bsr      print
  96.  
  97. ende:
  98.    move.l  ExecBase,a6
  99.    move.l  dosbase(pc),a1
  100.    jsr     CloseLib(a6)
  101.    moveq   #0,d0
  102.    movem.l (a7)+,d0-a6  
  103.    rts
  104.  
  105. print:
  106.    movem.l d0-a6,-(a7)
  107.    move.l  #-1,length
  108.    lea     datas(pc),a1
  109.    move.l  d2,(a1)
  110.    lea     routine(pc),a2
  111.    lea     buffer,a3
  112.    move.l  ExecBase,a6
  113.    jsr     RawDoFmt(a6)
  114.    move.l  handle(pc),d1
  115.    move.l  #buffer,d2
  116.    move.l  length,d3
  117.    move.l  dosbase(pc),a6
  118.    jsr     Write(a6)
  119.    movem.l (a7)+,d0-a6
  120.    rts
  121.  
  122. routine:
  123.    move.b  d0,(a3)+
  124.    clr.b   (a3)
  125.    addq.l  #1,length
  126.    rts
  127.  
  128.  
  129. length:      dc.l  0
  130. dosbase:     dc.l  0
  131. handle:      dc.l  0
  132. datas:       dc.l  0
  133. dosname:     dc.b  "dos.library",0
  134. formatstr0:  dc.b  "pi = %ld.",0
  135. formatstr1:  dc.b  "%04ld",0
  136. formatstr2:  dc.b  "Umläufe : %-ld",10,0
  137. formatstr3:  dc.b  10,"Anzahl der Nachkommastellen: %-ld",10,0
  138.    even
  139. buffer:      ds.b  250
  140. pi:          dc.l  0
  141. llen:        dc.l  0
  142. wlen         dc.l  0
  143. flen         dc.l  0
  144. alen         dc.l  0
  145.    END
  146.